﻿using System;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections.Generic;
using System.ComponentModel;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation
{
    [SinacorServiceBehavior]
    public class Ordem :  ServiceContract.IOrdem
	{		
        /// <summary>
        /// Historico:
        /// Data : 21/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs.: Implementado. Retorna o mercado
        /// </summary>
        /// <returns></returns>
		public List<DataContract.Response.MercadoResponse> ConsultarMercados()
		{
            BusinessLogic.Mercado blMercado = new BusinessLogic.Mercado();

            List<BusinessEntity.Mercado> mercadoCollection = blMercado.ConsultarMercado();

            return Translator.TranslateBetweenMercadoResponseAndMercado
                .TranslateMercadoListToMercadoResponseList(mercadoCollection);	
		}

        /// <summary>
        /// Consultar Bolsa por Codigo
        /// Autor: Eduardo Sertorio
        /// Data: 07/01/2008
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataContract.Response.BolsaResponse ConsultarBolsaCodigo(DataContract.Request.ConsultarBolsaCodigoRequest request)
		{
            BusinessEntity.Bolsa beBolsaRequest = Translator.TranslateBetweenBolsaRequestAndBolsa.TranslateBolsaRequestToBolsa(request);

            BusinessEntity.Bolsa beBolsaResponse = (new Ordens.BusinessLogic.Bolsa()).ConsultarBolsaCodigo(beBolsaRequest);

            DataContract.Response.BolsaResponse response = Translator.TranslateBetweenBolsaAndBolsaResponse.TranslateBolsaToBolsaResponse(beBolsaResponse);

			return response;
		}

        /// <summary>
        /// Consultar Ordem Distribuicao Padrao
        /// Autor: MBelarmino
        /// Data: 07/01/2008
        /// </summary>
        public List<DataContract.Response.OrdemResponse> ConsultarOrdemDistribuicaoOrdemPadrao(DataContract.Request.ConsultarOrdemDistribuicaoOrdemPadraoRequest request)
        {
            BusinessLogic.Ordem Bl = new BusinessLogic.Ordem();
            return Translator.TranslateOrdem.ToOrdemResponseList(Bl.ConsultarOrdemDistribuicaoOrdemPadrao(new Translator.TranslateConsultarOrdemDistribuicaoOrdemPadrao().ToParameter(request)));
        }

		public List<DataContract.Response.OrdemResponse> ConsultarOrdens(DataContract.Request.ConsultarOrdensRequest request)
		{
            BusinessLogic.Ordem ordemBl = new BusinessLogic.Ordem();
            BusinessEntity.Ordem ordemBE = Translator.TranslateConsultarOrdensRequest.ToOrdem(request);

            return Translator
                .TranslateOrdem.ToOrdemResponseList(ordemBl.ConsultarOrdens(ordemBE));
		}

        /// <summary>
        /// Autor: Eduardo Sertorio
        /// Data : 20/01/2008*
        /// Obs.: Criacao da operacao especifica para tela Manutenção de Ordens por exigir campos e filtros diferentes da operacao ConsultarOrdens
        /// 
        /// Autor: Eduardo Sertorio
        /// Data : 28/02/2008
        /// Obs. : Revisao e teste.
        /// </summary>
        /// <param name="request"></param>
        /// 
        /// <returns></returns>
        public List<DataContract.Response.OrdemResponse> ConsultarOrdensManutencaoOrdens(DataContract.Request.ConsultarOrdensManutencaoOrdensRequest request)
        {
            BusinessEntity.Ordem ordemBE = Translator.TranslateConsultarOrdensManutencaoOrdens.TranslateToOrdem(request);
            List<BusinessEntity.Ordem> listaBEOrdem = (new BusinessLogic.Ordem()).ConsultarOrdensManutencaoOrdens(ordemBE);
            List<DataContract.Response.OrdemResponse> response = Translator.TranslateConsultarOrdensManutencaoOrdens.TranslateToOrdemResponseList(listaBEOrdem);
            return response; 
        }

		/// <summary>
		/// Autor: Eduardo Sertorio
        /// Data : 28/02/2008
        /// Obs. : Revisao e teste.
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
        public List<DataContract.Response.OrdemResponse> ConsultarOrdensNegocio(DataContract.Request.ConsultarOrdensNegocioRequest request)
		{
            BusinessEntity.Negocio beNegocioRequest = Translator.TranslateConsultarOrdensNegocioRequest.ToNegocio(request);
            List<BusinessEntity.Ordem> beOrdemResponse = (new BusinessLogic.Ordem()).ConsultarOrdensNegocio(beNegocioRequest);
            List<DataContract.Response.OrdemResponse> response = Translator.TranslateOrdem.ToOrdemResponseList(beOrdemResponse);
            return response;
		}
        
    	/// <summary>
		/// Operacao responsavel consultar as ordens financiamento / pop relacionados a uma ordem
        /// 
        /// Autor: Eduardo Sertorio
        /// Data : 28/02/2007
        /// Obs. : Revisao e teste.
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
		public List<DataContract.Response.FinanciamentoEstrategiaPOPResponse> ConsultarOrdensFinanciamentoPOP(DataContract.Request.ConsultarOrdensFinanciamentoPOPRequest request)
		{
			BusinessEntity.Ordem beOrdemRequest = Translator.TranslateConsultarOrdensFinanciamentoPOPRequest.ToOrdem(request);
            List<BusinessEntity.Ordem> beOrdemResponse = (new BusinessLogic.Ordem()).ConsultarSubOrdens(beOrdemRequest);
            List<DataContract.Response.FinanciamentoEstrategiaPOPResponse> response = Translator.TranslateOrdem.ToFinanciamentoEstrategiaPOPResponseList(beOrdemResponse);
            return response;
		}

        /// <summary>
        /// Descricao : Servico de inclusao de ordem normal ou mega-bolsa
        /// Autor : Eduardo Sertorio
        /// Data : 27/12/2007
        /// </summary>
        /// <param name="request">OrdemRequest : ordem para incluir</param>
        /// <returns>OrdemResponse : ordem incluida</returns>
        ///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public DataContract.Response.OrdemResponse IncluirOrdem(DataContract.Request.IncluirOrdemRequest request)
        {
            //transformar DC para BE
            BusinessEntity.Ordem beOrdemRequest = Translator.TranslateIncluirOrdemRequest.ToOrdem(request);
            //executar
            BusinessEntity.Ordem beOrdemResponse = (new BusinessLogic.Ordem()).IncluirOrdem(beOrdemRequest);
            ////tranformar BE para DC
            DataContract.Response.OrdemResponse response = Translator.TranslateOrdem.ToOrdemResponse(beOrdemResponse);
            //retornar
            return response;
        }

		/// <summary>
		/// Operacao responsavel por Incluir uma ordem Financiamento / POP
		/// Data: 18/12/2007
		/// Autor: Diogo Milanez
		/// Obs: Criacao do metodo
        /// 
        /// Data : 28/02/2007
        /// Autor: Eduardo Sertorio
        /// Obs. : Revisao e teste.
        /// </summary>
		/// <param name="request"></param>
		///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
		public DataContract.Response.OrdemFinanciamentoPOPResponse IncluirOrdemFinanciamentoPOP(DataContract.Request.IncluirOrdemFinanciamentoPOPRequest request)
		{
			BusinessEntity.Ordem beOrdemRequest = Translator.TranslateIncluirOrdemFinanciamentoPOPRequest.ToOrdem(request);
            BusinessEntity.RetornoMetodosOrdemFinanciamentoPOP beOrdemResponse = (new BusinessLogic.Ordem()).IncluirOrdemFinanciamentoPOP(beOrdemRequest);
            DataContract.Response.OrdemFinanciamentoPOPResponse response = Translator.TranslatenRetornoMetodosOrdemFinanciamentoPOP.ToOrdemFinanciamentoPOPResponse(beOrdemResponse);
            return response;
		}

        ////REMOVIDO SEGUNDO ORIENTACAO DO ANALISTA SINACOR (KLEBER)
        ///// <summary>
        ///// Data: 20/12/2007
        ///// Autor: Diogo Milanez
        ///// * Parametro de Entrada deixou de ser uma lista
        ///// * Parametro de saida deixou de ser void
        ///// 
        ///// Data: 21/12/2007
        ///// Autor: Diogo Milanez
        ///// Obs:
        ///// Metodo renomeado de AlterarOrdensFinanciamentoPOP para AlterarOrdemFinanciamentoPOP
        ///// </summary>
        ///// <param name="request"></param>
        ///// <returns></returns>
        /////[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        //public DataContract.Response.OrdemFinanciamentoPOPResponse AlterarOrdemFinanciamentoPOP(DataContract.Request.AlterarOrdemFinanciamentoPOPRequest request)
        //{
        //    BusinessEntity.RetornoMetodosOrdemFinanciamentoPOP retorno;
        //    BusinessLogic.Ordem ordemBL = new BusinessLogic.Ordem();
        //    BusinessEntity.Ordem ordemBE = new BusinessEntity.Ordem();
        //    ordemBE = Translations.TranslateAlterarOrdemFinanciamentoPOPRequest.ToOrdem(request);

        //    retorno = ordemBL.AlterarOrdemFinanciamentoPOP(ordemBE);

        //    return Translations.TranslatenRetornoMetodosOrdemFinanciamentoPOP.ToOrdemFinanciamentoPOPResponse(retorno);
        //}

        /// <summary>
        /// Metodo responsavel por cancelar uma ordem financiamento pop
        /// Data: 04/01/2008
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// 
        /// Data : 22/04/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Metodo renomeado de (CancelarOrdemFinanciamentoPOP) para (ExcluirOrdemFinanciamentoPOP) - esertorio - 200804221609 - ref isue ID0003284 - ref issue ID0003560
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
		///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public DataContract.Response.OrdemFinanciamentoPOPResponse ExcluirOrdemFinanciamentoPOP(DataContract.Request.ExcluirOrdemFinanciamentoPOPRequest request) //renomeado - esertorio - 200804221609 - ref isue ID0003284
		{
            BusinessEntity.Ordem ordemBE = Translator.TranslateCancelarOrdemFinanciamentoPOPRequest.ToOrdem(request);

            BusinessEntity.RetornoMetodosOrdemFinanciamentoPOP retorno = (new BusinessLogic.Ordem()).ExcluirOrdemFinanciamentoPOP(ordemBE); //renomeado - esertorio - 200804221512 - ref isue ID0003284

            DataContract.Response.OrdemFinanciamentoPOPResponse response = Translator.TranslatenRetornoMetodosOrdemFinanciamentoPOP.ToOrdemFinanciamentoPOPResponse(retorno);

            return response;
		}

		/// <summary>
        /// Data : 09/01/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Altera a Ordem (Mega Bolsa oun Normal)
        /// 
        /// Data : 28/04/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Alterar retorno para devolver ordem alterada com as mensagems. //incluido - esertorio - 200804281035 - ref issue ID0003694
        /// </summary>
        /// <param name="request">DataContract.Request.AlterarOrdemRequest</param>
        /// <returns>DataContract.Response.OrdemResponse</returns>
        public DataContract.Response.OrdemResponse AlterarOrdem(DataContract.Request.AlterarOrdemRequest request)
		{
            //transformar DC.Req em BE
            BusinessEntity.Ordem beOrdemRequest = Translator.TranslateAlterarOrdemRequest.ToOrdem(request);

            //executar
            BusinessEntity.Ordem beOrdemResponse = (new BusinessLogic.Ordem()).AlterarOrdem(beOrdemRequest); //alterado - esertorio - 200804281035 - ref issue ID0003694

            //transformar BE em DC.Res
            DataContract.Response.OrdemResponse dcOrdemResponse = Translator.TranslateOrdem.ToOrdemResponse(beOrdemResponse); //incluido - esertorio - 200804281035 - ref issue ID0003694

            return dcOrdemResponse; //incluido - esertorio - 200804281035 - ref issue ID0003694
		}

        /// <summary>
        /// Autor: Eduardo Sertorio
        /// Data: 20/01/2008****
        /// </summary>
        /// <param name="request"></param>
        ///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)] 
        public void ExcluirOrdem(DataContract.Request.ExcluirOrdemRequest request)
        {
            //transformar DC.Req para BE
            BusinessEntity.Ordem beOrdemRequest = Translator.TranslateExcluirOrdemRequest.ToOrdem(request);

            //executar
            (new BusinessLogic.Ordem()).ExcluirOrdem(beOrdemRequest);
        }
             
		/// <summary>
		/// Operacao responsavel por realizar o casamento de ordens financiamento / POP
		/// Data: 18/12/2007
		/// Autor: Diogo Milanez
		/// OBs: Criacao do metodo
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
		///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
		public DataContract.Response.RealizarCasamentoResponse RealizarCasamentoOrdensFinanciamentoPOP(DataContract.Request.RealizarCasamentoOrdemFinanciamentoPOPRequest request)
		{
			BusinessEntity.Ordem ordemBE = Translator.TranslateRealizarCasamentoOrdemFinanciamentoPOPRequest.ToOrdem(request);

            BusinessEntity.RetornoCasamento response = (new BusinessLogic.Ordem()).RealizarCasamentoOrdemFinanciamentoPOP(ordemBE);

			return Translator.TranslateRetornoCasamento.ToRealizarCasamentoResponse(response);
		}
        		
		/// <summary>
		/// Metodo responsavel por setar o flag na ordem que indica que o saldo devera
		/// ser desprezado
		/// </summary>
		///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
		public void DesprezarSaldoOrdem(DataContract.Request.DesprezarSaldoOrdemRequest request)
		{
			BusinessEntity.Ordem ordemBE = Translator
												.TranslateBetweenDesprezarSaldoOrdemRequestAndOrdem
												.TranslateDesprezarSaldoOrdemRequestToOrdem(request);

            (new BusinessLogic.Ordem()).DesprezarSaldo(ordemBE,true);
		}

		/// <summary>
		/// Metodo responsavel por setar o flag na ordem que indica que o saldo devera
		/// ser considerado
		/// </summary>
		///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
		public void ConsiderarSaldoOrdem(DataContract.Request.ConsiderarSaldoOrdemRequest request)
		{
            BusinessLogic.Ordem ordemBL = new BusinessLogic.Ordem();
            BusinessEntity.Ordem ordemBE = Translator
                .TranslateBetweenConsiderarSaldoOrdemRequestAndOrdem
                .TranslateConsiderarSaldoOrdemRequestToOrdem(request);

            ordemBL.DesprezarSaldo(ordemBE,false);
		}

        /// <summary>
        /// Metodo responsavel por consultar a carteira padrao de uma ordem financiamento/POP
        /// Data: 04/01/2008
        /// Autor: Diogo Milanez
        /// Obs: Criacao do metodo
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataContract.Response.ConsultarCarteiraPadraoOrdemFinanciamentoPOPResponse ConsultarCarteiraPadraoOrdemFinanciamentoPOP(Ordens.Service.DataContract.Request.ConsultarCarteiraPadraoOrdemFinanciamentoPOPRequest request)
        {
            int? codigoCarteira;
            BusinessLogic.Ordem ordemBL = new BusinessLogic.Ordem();
            BusinessEntity.Ordem ordemBE = Translator
                .TranslateConsultarCarteiraPadraoOrdemFinanciamentoPOPRequest
                .ToOrdem(request);

            codigoCarteira = ordemBL.ConsultarCarteiraPadrao(ordemBE);

            if (!codigoCarteira.HasValue)
                return null;
            else
            {
                DataContract.Response.ConsultarCarteiraPadraoOrdemFinanciamentoPOPResponse response;

                response = new Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.ConsultarCarteiraPadraoOrdemFinanciamentoPOPResponse();
                response.CodigoCarteira = codigoCarteira;
                return response;
            }            
        }

        /// <summary>
        /// Historico:
        /// Data : 20/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs.: Implementado. Retorna as mensagens de Justificativa e observacao
        /// </summary>
        /// <returns></returns>
        public List<DataContract.Response.MensagemResponse> ConsultarMensagensJustificativaObservacao()
        {
            List<BusinessEntity.Mensagem> responseCollection = (new BusinessLogic.Ordem()).ConsultarMensagensJustificativaObservacao();

            List<DataContract.Response.MensagemResponse> response = Translator.TranslateBetweenMensagemAndMensagemResponse
                .TranslateMensagemCollectionMensagemResponseCollection(responseCollection);

            return response;
        }

        /// <summary>
        /// Servico responsavel por alterar ou inserir uma observacao de uma ordem
        /// Historico:
        /// Data: 28/12/2007
        /// Autor: Ludmilla Modesto 
        /// Observacao: Criacao da Operacao
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        ///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public void AlterarObservacao(DataContract.Request.AlterarObservacaoRequest request)
        {
            BusinessLogic.Ordem blOrdem = new BusinessLogic.Ordem();

            BusinessEntity.Observacao beObservacao = Translator.TranslateBetweenAlterarObservacaoRequestAndObservacao
                .TranslateAlterarObservacaoRequestToObservacao(request);

            blOrdem.AlterarObservacao(beObservacao);
        }
        
        /// <summary>
        /// Servico responsavel por Inserir uma Justificativa
        /// Historico:
        /// Data: 26/12/2007
        /// Autor: Ludmilla Modesto 
        /// Observacao: Criacao da Operacao
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        ///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public void IncluirJustificativa(DataContract.Request.IncluirJustificativaRequest request)
        {
            BusinessLogic.Ordem blOrdem = new BusinessLogic.Ordem();
            BusinessEntity.Justificativa beJustificativa = Translator.TranslateBetweenIncluirJustificativaRequestAndJustificativa.
                TranslateIncluirJustificativaRequestToJustificativa(request);
            blOrdem.IncluirJustificativa(beJustificativa);

        }

        /// <summary>
        /// Servico responsavel por Consultar uma Justificativa
        /// Historico:
        /// Data: 26/12/2007
        /// Autor: Ludmilla Modesto 
        /// Observacao: Criacao da Operacao
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public List<DataContract.Response.JustificativaResponse> ConsultarJustificativas(DataContract.Request.ConsultarJustificativasRequest request)
        {
            BusinessLogic.Ordem blOrdem = new BusinessLogic.Ordem();

            BusinessEntity.Justificativa beJustificativa = Translator.
                TranslateBetweenConsultarJustificativasRequestAndJustificativa.
                TranslateConsultarJustificativasRequestToJustificativa(request);

            List<BusinessEntity.Justificativa> justificativaCollection = blOrdem.ConsultarJustificativas(beJustificativa);

            return Translator.TranslateBetweenJustificativaAndJustificativaResponse
                .TranslateJustificativaCollectionJustificativaResponseCollection(justificativaCollection);
        }

        /// <summary>
        /// Servico responsavel por Atualizar uma Justificativa
        /// Historico:
        /// Data: 26/12/2007
        /// Autor: Ludmilla Modesto 
        /// Observacao: Criacao da Operacao
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        ///[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public void AlterarJustificativa(DataContract.Request.AlterarJustificativaRequest request)
        {
            BusinessLogic.Ordem blOrdem = new BusinessLogic.Ordem();
            BusinessEntity.Justificativa beJustificativa = Translator.
            TranslateBetweenAlterarJustificativaRequestAndJustificativa.TranslateAlterarJustificativaRequestToJustificativa(request);

            blOrdem.AlterarJustificativa(beJustificativa);
        }

        /// <summary>
        /// Servico responsavel por trazer a observacao de uma ordem
        /// Historico:
        /// Data: 27/12/2007
        /// Autor: Ludmilla Modesto 
        /// Observacao: Criacao da Operacao
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataContract.Response.ObservacaoResponse ConsultarObservacao(DataContract.Request.ConsultarObservacaoRequest request)
        {
            BusinessLogic.Ordem blOrdem = new BusinessLogic.Ordem();
            BusinessEntity.Observacao beObservacao = Translator.TranslateBetweenConsultarObservacaoRequestAndObservacao.
                TranslateConsultarObservacaoRequestToObservacao(request);

            BusinessEntity.Observacao beResponse = blOrdem.ConsultarObservacao(beObservacao);

            DataContract.Response.ObservacaoResponse responseObservacao = new DataContract.Response.ObservacaoResponse();

            return responseObservacao = Translator.TranslateBetweenObservacaoAndObservacaoResponse
                            .TranslateObservacaoToObservacaoResponse(beResponse);

        }

        /// <summary>
        /// Data : 08/04/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao do metodo - ref issue ID0002770
        /// 
        /// 20080420 19:41 - 
        /// RValadao.7Comm - 
        /// Bug 0003345
        /// IndicadorAtualizacaoQuantidadeOrdemPreboleto
        /// </summary>
        /// <returns></returns>
        public DataContract.Response.ConsultarParametroControleOrdensResponse ConsultarParametroControleOrdens()
        {
            Sinacor.Servico.Bovespa.Ordens.BusinessEntity.ParametroControleOrdens beParametroControleOrdens = (new BusinessLogic.Ordem()).RecuperarParametroControleOrdens();
            DataContract.Response.ConsultarParametroControleOrdensResponse dcConsultarParametroControleOrdensResponse = new Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.ConsultarParametroControleOrdensResponse();
            dcConsultarParametroControleOrdensResponse.IndicadorDigitoAberturaOrdem = beParametroControleOrdens.IndicadorDigitoAberturaOrdem;
            dcConsultarParametroControleOrdensResponse.IndicadorAtualizacaoQuantidadeOrdemPreboleto = beParametroControleOrdens.IndicadorAtualizacaoQuantidadeOrdemPreboleto; //20080420 19:41 - RValadao.7Comm - Bug 0003345
            return dcConsultarParametroControleOrdensResponse;
        }

        /// <summary>
        /// Autor: LLiez.7comm
        /// </summary>
        /// <param name="grupo"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        public List<DataContract.Response.OrdemResponse> ConsultarOrdemDistribuicao(DataContract.Request.ConsultarOrdemDistribuicaoRequest request)
        {
            BusinessLogic.Ordem blOrdem = new BusinessLogic.Ordem();

            return Translator.TranslateConsultarOrdemDistribuicao.ToResponse (
                blOrdem.ConsultarOrdemDistribuicao (
                    Translator.TranslateConsultarOrdemDistribuicao.ToBusinessEntity(request)
                )
            );
        }
        
        public List<Service.DataContract.Response.OrdemResponse> ConsultarOrdemDistribuicaoOrdem(Service.DataContract.Request.ConsultarOrdemDistribuicaoOrdem pConsultarOrdemDistribuicaoOrdem)
		{
            BusinessLogic.Ordem ordem = new BusinessLogic.Ordem();
            Translator.TranslateConsultarOrdemDistribuicaoOrdem xLator = new Translator.TranslateConsultarOrdemDistribuicaoOrdem();
            List<BusinessEntity.Ordem> ordemList = ordem.ConsultarOrdemDistribuicaoOrdem(xLator.ToParameter(pConsultarOrdemDistribuicaoOrdem));

            return Translator.TranslateOrdem.ToOrdemResponseList(ordemList);
		}

        public List<Service.DataContract.Response.OrdemResponse> ConsultarOrdemDistribuicaoOrdemLote(List<Service.DataContract.Request.ConsultarOrdemDistribuicaoOrdemLote> pConsultarOrdemDistribuicaoOrdemLote
        )
        {
            BusinessLogic.Ordem ordem = new BusinessLogic.Ordem();
            Translator.TranslateConsultarOrdemDistribuicaoOrdemLote xLator = new Translator.TranslateConsultarOrdemDistribuicaoOrdemLote();
            List<BusinessEntity.Ordem> ordemList = ordem.ConsultarOrdemDistribuicaoOrdemLote(xLator.ToListParameter(pConsultarOrdemDistribuicaoOrdemLote));

            return Translator.TranslateOrdem.ToOrdemResponseList(ordemList);
        }

        public void CancelarOrdemDistribuida(List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.CancelarOrdemDistribuida> request)
        {
            Translator.CancelarOrdemDistribuidaToCancelarOrdemDistribuida translator = new Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator.CancelarOrdemDistribuidaToCancelarOrdemDistribuida();
            new BusinessLogic.Ordem().CancelarOrdemDistribuida(translator.TranslateToList(request));
        }

        public List<DataContract.Response.OrdemDistribuidaResultadoResponse> CancelarOrdensDistribuidas(List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.OrdemDistribuidaRequest> request)
        {
            Translator.DataContractToBusinessEntity.Ordem translatorRequest = new Translator.DataContractToBusinessEntity.Ordem();
            Translator.BusinessEntityToDataContract.Ordem translatorResponse = new Translator.BusinessEntityToDataContract.Ordem();
            BusinessLogic.Ordem businessOrdem = new BusinessLogic.Ordem();
            return translatorResponse.ToOrdemDistribuidaResultado(businessOrdem.CancelarOrdensDistribuidas(translatorRequest.ToOrdemDistribuida(request)));
        }

        public List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemDistribuicao> ConsultarOrdemDistribuida(Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.ConsultarOrdemDistribuida request)
        {
            Translator.ConsultarOrdemDistribuidaToConsultarOrdemDistribuida tranlator = new Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator.ConsultarOrdemDistribuidaToConsultarOrdemDistribuida();
            BusinessLogic.Ordem consultarOrdemDistribuida = new Sinacor.Servico.Bovespa.Ordens.BusinessLogic.Ordem();
            Translator.OrdemToOrdemDistribuicao tranlateOrdem = new Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator.OrdemToOrdemDistribuicao();
            return tranlateOrdem.TranslateToList(consultarOrdemDistribuida.ConsultarOrdemDistribuida(tranlator.Translate(request)));
        }

        public List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemResponse> ConsultarOrdem(Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.ConsultarOrdemRequest request)
        {
            Translator.TranslateConsultarOrdemRequestToConsultarOrdem translator = new Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator.TranslateConsultarOrdemRequestToConsultarOrdem();
            BusinessLogic.Ordem consultarOrdem = new BusinessLogic.Ordem();
            Translator.TranslateBetweenOrdemResponseAndOrdem translatorordem =  new  Translator.TranslateBetweenOrdemResponseAndOrdem();
           
            return translatorordem.Translate (consultarOrdem.ConsultarOrdem(translator.Translate(request)));
        }
        
        public void FecharOrdem(List<DataContract.Request.FecharOrdemRequest> pFecharOrdem){
            BusinessLogic.Ordem objOrdem = new Sinacor.Servico.Bovespa.Ordens.BusinessLogic.Ordem();
            objOrdem.FecharOrdem(new Translator.TranslateFecharOrdemToParameter().TranslateToList(pFecharOrdem));
        }
        
        public List<DataContract.Response.JustificativaResponse> ConsultarJustificativaPadrao(){
            BusinessLogic.Ordem objOrdem = new Sinacor.Servico.Bovespa.Ordens.BusinessLogic.Ordem();
            
            DataContract.Response.JustificativaResponse to;
            List<DataContract.Response.JustificativaResponse> objList = new List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.JustificativaResponse>();
            List<BusinessEntity.Justificativa> objListBE = objOrdem.ConsultarJustificativaPadrao();
            for(int i=0; i<objListBE.Count; i++){
                to = new Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.JustificativaResponse();
                
                to.Texto = objListBE[i].TextoJustificativa;
                
                objList.Add(to);
            }
            
            return objList;
        }
        
        public List<DataContract.Response.OrdemInconsistenciaResponse> ConsultarOrdemInconsistencia(DataContract.Request.ConsultarOrdemInconsistenciaRequest request){
            BusinessLogic.Ordem objOrdem = new Sinacor.Servico.Bovespa.Ordens.BusinessLogic.Ordem();
            
            return new Translator.TranslateOrdemInconsistenciaToResponse().Translate(objOrdem.ConsultarOrdemInconsistencia(new Translator.TranslateConsultarOrdemInconsistenciaRequestToParameter().Translate(request)));
        }

        #region ConsultarOrdemDistribuicaoOrdemOperador
        /// <summary>
        /// Método: ConsultarOrdemDistribuicaoOrdemOperador
        /// Autor: Ptruiz.gp
        /// Data: 2008.10.27
        /// </summary>
        /// <param name="pConsultarOrdemDistribuicaoOrdemOperador">DataContract.Request.ConsultarOrdemDistribuicaoOrdemOperadorRequest</param>
        /// <returns> List(DataContract.Response.OrdemResponse)</returns>
        public List<DataContract.Response.OrdemResponse> ConsultarOrdemDistribuicaoOrdemOperador(DataContract.Request.ConsultarOrdemDistribuicaoOrdemOperadorRequest pConsultarOrdemDistribuicaoOrdemOperador)
        {
            BusinessLogic.Ordem blOrdem = new Sinacor.Servico.Bovespa.Ordens.BusinessLogic.Ordem();

            Translator.TranslateOrdemRequestToOrdemParameter translator = new Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator.TranslateOrdemRequestToOrdemParameter();
            Translator.TranslateBetweenOrdemResponseAndOrdem translatorResponse = new Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator.TranslateBetweenOrdemResponseAndOrdem();

            return translatorResponse.TranslateToList(blOrdem.ConsultarOrdemDistribuicaoOrdemOperador(translator.Translate(pConsultarOrdemDistribuicaoOrdemOperador)));
        }
        #endregion

        #region IOrdem Members


        //public List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemResponse> ConsultarOrdemDistribuicaoOrdemLote(Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.ConsultarOrdemDistribuicaoOrdemLote pConsultarOrdemDistribuicaoOrdemLote)
        //{
        //    throw new NotImplementedException();
        //}

        #endregion
    }
}

